'use strict';

/**
 * 格式化时间
 * @param  {Datetime} source 时间对象
 * @param  {String} format 格式
 * @return {String}        格式化过后的时间
 */
function formatDate(source, format) {
	var o = {
		'M+': source.getMonth() + 1, // 月份
		'd+': source.getDate(), // 日
		'H+': source.getHours(), // 小时
		'm+': source.getMinutes(), // 分
		's+': source.getSeconds(), // 秒
		'q+': Math.floor((source.getMonth() + 3) / 3), // 季度
		'f+': source.getMilliseconds(), // 毫秒
		'T+': source.getHours() < 12 ? 'AM' : 'PM', // AM or PM
		'hh': zeroize(source.getHours() % 12 || 12) // 12时制
	};
	if (/(y+)/.test(format)) {
		format = format.replace(RegExp.$1, (source.getFullYear() + '').substr(4 - RegExp.$1.length));
	}
	for (var k in o) {
		if (new RegExp('(' + k + ')').test(format)) {
			format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
		}
	}
	return format;
}

/**
 * 填充0字符
 * @param  {String} value 需要填充的字符串
 * @param  {int} length   总长度
 * @return {String}       填充后的字符串
 */
function zeroize(value, length) {
	if (!length) {
		length = 2;
	}
	value = new String(value);
	for (var i = 0, zeros = ''; i < (length - value.length); i++) {
		zeros += '0';
	}
	return zeros + value;
}

module.exports = {
	formatDate: formatDate
};
